/*
 * @Author: quit
 * @Date: 2021-11-09 16:01:11
 * @LastEditTime: 2021-12-30 15:07:31
 * @Descripttion:  VueX用户数据模块
 */
// 引入本地存储方法
import { getToken, setToken, removeToken, removeData } from '@/utils/auth'
// 引入登录API
import { login, getUserInfo } from '@/api/user'
import { Notification } from 'element-ui'

const state = {
    token: getToken(), // 用户Token,在项目开始时先获取本地存储中的Token
    userInfo: {} // 用户信息
}

const mutations = {
    /**
     * @description: 设置token
     * @param {*} state 本地Vuex中的state对象
     * @param {*} token 传入载荷
     */
    VueXSetToken(state, token) {
        setToken(token) // 本地存储
        state.token = token // 同步给Vuex中的token
    },
    /**
     * @description: 删除token
     */
    VueXRemoveToken(state) {
        state.token = null
        removeToken()
        removeData('BotDate')
    },
    /**
     * @description: 保存用户信息
     * @param {object} result 用户信息
     */
    VueXSetUserInfo(state, result) {
        state.userInfo = result
    },
    /**
     * @description: 删除用户信息
     */
    VueXRemoveUserInfo(state) {
        state.userInfo = {}
    }
}

const actions = {
    /**
     * @description: 登录方法，将会在login组件中导入使用
     * @param {*} context 本地VueX中的mutations对象
     * @param {*} data 传入载荷
     */
    async VueXLogin(context, data) {
        const result = await login(data)
        context.commit('VueXSetToken', result)
    },
    /**
     * @description: 获取用户信息
     */
    async VueXgetUserInfo(context) {
        const result = await getUserInfo()
        context.commit('VueXSetUserInfo', result)
    },
    /**
     * @description: 用户登出操作
     * @param {*} context
     */
    async VueXLogOut(context) {
        await context.commit('VueXRemoveToken')
        await context.commit('VueXRemoveUserInfo')
        Notification({
            title: '提示',
            type: 'success',
            position: 'bottom-right',
            duration: 3000,
            dangerouslyUseHTMLString: true,
            message: '退出成功',
            showClose: true
        })
    }
    //
}

export default {
    namespaced: true,
    state,
    mutations,
    actions
}
